package eleventh;
//11章 Java常用类库
public class Note {
}
/**
 * StringBuffer类
 * 因为String的特性是String的内容一旦声明将不可改变，如果要改变，则改变的是String的引用地址
 * 在String类中可以用“+“来进行字符串的连接，但是在StringBuffer中只能用append()来连接字符串
 * 提示：StringBuffer支持的方法大部分与String类似
 *
 *  面试题：请解释String StringBuffer StringBuilder的区别
 *  ①String的内容一旦声明将不可改变，而StringBuffer和StringBuilder声明的内容可以改变
 *  ②String Buffer类中提供的方法都是同步方法，属于线程安全的线程操作，而StringBuilder类中的方法属于异步方法，属于非线程安全的操作
 *
 *
 *  Runtime类
 *  在Java中Runtime类表示运行时操作类，是一个封装了JVM进行的类，每一个JVM都对应这一个Runtime类的实例
 *  此实例由JVM运行时为其实例化。所以在JDK文档中不会发现任何有关Runtime类中构造方法的定义，这是因为Runtime类本身的构造方法是私有化的（单例设计）
 *  如果想要取得一个Runtime实例，则只能通过 Runtime run = Runtime.getRuntime();
 *  也就是说在Runtime类中提供了一个静态方法getRuntime()方法，此类可以取得Runtime类的实例，
 *  取得Runtime实例可以获取系统的信息
 *  Runtime类中的方法：
 *  ①getRuntime():取得Runtime类的实例
 *  ②freeMemory():返回JVM中的空闲内存里
 *  ③maxMemory():返回JVM的最大内存量
 *  ④gc():运行垃圾回收器，释放空间
 *  ⑤exec(String command):执行本机命令
 *
 *  资源文件也叫属性文件，可以直接用Java类中提供的Properties类进行操作。
 *
 *  国际化程序
 *  想要实现国际化，就要认识Locale类，因为此类是实现国际化的一个重要类。
 *  Locale类的构造方法：
 *  public Locale(String language)  //根据语言代码构造一个语言环境
 *  public Locale(String language,String country)   //根据语言和国家构造一个语言环境
 *  实际上各个国家都有对应的ISO编码。比如中国的编码为zh-CN,英语-美国的编码是en-US，法语的编码是fr-FR
 *
 *  System类
 *  在System类中 所有的属性都是静态的，要想引用这些属性和方法，直接使用System类调用就行
 *  System类常用的方法：
 *  exit(int status)：系统退出，如果status非0就表示退出
 *  gc()：运行垃圾收集机制，调用的是Runtime类中的gc()方法
 *  currentTimeMillis()：返回以毫秒为单位的当前时间
 *  arraycopy(Object src,int srcPos,Object dest,int destPos,int length)：数组复制操作
 *  getProperties()：取得当前系统全部属性
 *  getProperty(String key)：根据键值取得属性的具体内容
 *
 *  System类中的方法都是静态的，所以在使用时候直接使用类名称调用就行，比如System.gc()；
 *
 *  对象的生命周期：
 *  一个类加载后要初始化，然后就可以进行对象的实例化，对象实例化时会调用构造方法完成，当一个对象不再使用的时候，就要等待被垃圾收集，
 *  之后对象终结，最终被程序卸载。
 *
 *  Math类
 *  在Math类中提供的一切方法都是静态方法，直接由类名称调用即可
 *
 *  Random类
 *  Random类中的常用方法：
 *  nextBoolean()
 *  nextDouble()
 *  nextFloat()
 *  nextInt()
 *  nextInt(int n)  //随机生成给定最大值的int值
 *  nextLong()
 *
 *  NumberFormat类
 *  当遇到的数字比较大的时候可以用NumberFormat类实现数字的格式化显示，这样就便于读者阅读数字
 *  NumberFormat表示数字的格式化类
 *  此类的定义：public abstract class NumberFormat extends Format
 *  NumberFormat也是一个抽象类，都是Format类的子类，使用时可以直接使用NumberFormat中提供的静态方法为其实例化。
 *  NumberFormat类常用的方法：
 *  getAvailableLocales()：返回所有语言环境的数组
 *  getInstance()：返回当前默认语言环境的数字格式
 *  getInstance()：返回指定语言环境的数字格式
 *  getCurrencyInstance()：返回当前默认的货币格式
 *  getCurrencyInstance(Locale inLocale)：返回指定语言环境的数字格式
 *
 *
 *  BigInteger类
 *  当一个数字非常大的时候，是无法使用基本类型接收的
 *  BigInteger表示最大整数类，定义在java.math包中的
 *  如果在操作时一个整型数据以及超过了整数的最大类型长度，数据无法装入，此时用BIgInteger类进行操作
 *  常用方法：
 *  BigInteger(String val)：将一个字符串变为BigInteger类型的数据
 *  add(BigInteger val)：假发
 *  subtract(BigInteger val)
 *  multiply(BigInteger val)
 *  divide(BigInteger val)
 *  max(BigInteger val)：返回连个大数字中的最大值
 *  min(BigInteger val)：返回两个大数字中的最小值
 *  divideAndRemainder(BigInteger val)：除法操作，数组第一个元素为除法的商 第二个元素为除法的余数
 *  还有很多方法 自行查阅JDK文档
 *
 *  BigDecimal类
 *  对于不需要任何计算精度的数字可以直接使用float或者double
 *  但是如果需要精度计算的结果
 *  则必须使用BigDecimal类，而且使用BigDecimal类也可以进行大数的操作
 *  BigDecimal类常用方法：
 *  BigDecimal(double val)  //将double表示形式转换为BigDecimal
 *  BigDecimal(int val) //将int表示形式转换为BigDecimal
 *  BigDecimal(String val) //将字符串表示形式转换为BigDecimal
 *  add(BigDecimal augend)
 *  subtract(BigDecimal subtrahend)
 *  multiply(BigDecimal multiplicand)
 *  divide(BigDecimal divisor)
 *
 *  Java中支持对象的克隆操作 直接使用Object类中的clone()方法即可
 *  方法定义：protected Object clone() throws CloneNotSupportedException
 *  以上方法是受保护的类型，所以在子类中必须覆写此方法，而且覆写之后应该扩大访问权限，这样才能被外部所调用，
 *  但是具体的克隆方法的实现还是在Object之中，所以在覆写方法中，只需要调用Object类中的clone()方法即可完成操作，
 *  而且在对象所在的类中必须实现Cloneable接口才可以完成对象的克隆操作
 *  但是如果直接查询JDK文档会发现Cloneable接口中并没有任何的方法定义，所以此接口在设计上称为一种标志接口，表示对象可以被克隆
 *
 *  Arrays类
 *  常用方法：
 *  equals(int[] a,int[] a2)：判断两个数组是否相等，此方法被重载多次，可以判断各种数据类型的数组
 *  fill(int[] a,int val)：将指定内容填充到数组之中，此方法被重载多次，可以填充各种数据类型的数组
 *  sort(int[] a)：数组排序
 *  binarySearch(int[] a,int key)：对排序后的数组进行检索。
 *  toString(int[] a)：输出数组信息。
 *
 *  Comparable接口
 *  在java.util.Arrays类中定义的sort()方法 存在一个针对对象数组排序的曹祖支持，但如果要使用这个方法，则必须结合比较器来完成，
 *  所以比较器主要是在进行对象数组排序时使用。
 *
 *  在说数组的时候，讲过可以直接使用java.util.Arrays类进行数组的排序操作，
 *  而且Arrays类中的sort()方法被重载多次，可以对任意类型的数组排序，排序时会根据数值的大小进行排序
 *  同样，此类也可以对Objecct数组进行排序，但是要使用此种方法排序也是有要求的，即对象所在的类必须实现Comparable接口
 *  此接口就是用于指定对象排序规则的。
 *  Comparable接口的定义：public interface Comparable<T>{
 *      public int compareTo(T o);
 *  }
 *  从上面的定义中发现：接口中也用了泛型技术，其中只有一个compareTo方法，此方法返回一个Int类型的数据
 *  但是int的值只能是以下3种
 *  ①1表示大于
 *  ②-1表示小于
 *  ③0表示等于
 *
 *  提示：String,Integer等类都实现了Comparable接口、
 *  这些类的对象数组都可以直接利用Arrays.sort()进行对象数组排序
 *
 *  如果一个类已经完成开发，但是在此类建立的初期并没有实现Comparable接口，此时肯定是无法进行对象排序操作的。
 *  所以为了解决这样的问题，Java定义了另一个比较器的擦欧总接口--Comparator。此接口定义在java.util包中，接口定义如下：
 *  public interface Comparator<T>{
 *      public int compare(T o1,T o2);
 *      boolean equals(Object obj);
 *  }
 *  可以发现，此接口中依然存在一个compareTo()方法，但是与之前不同的是，此方法要接受两个对象，其返回值依然是0、1、-1
 *  但是这个接口的使用方法和之前不同的是，需要单独指定好一个比较器的比较规则类才可以完成数组排序。
 *
 *  观察者设计模式
 *  观察者设计模式类似于一种数据监听的操作，即当某些数据发生变化后，可以立刻引起相应。
 *  在Java种提供有专门的观察者实现类。
 *  举个例子：每当房子价格变化时，所有的购房者都属于观察者，这就叫观察者者设计模式。
 *  在Java种，可以使用Observable类和Observer接口轻松实现上述功能。
 *
 *  正则表达式
 *  利用正则表达式可以执行更加复杂的字符串的拆分、验证、替代等操作
 *
 *  Pattern类和Matcher类都在java.util.regex包中定义。
 *  Pattern类的主要作用是进行正则规范，Matcher类主要执行规范，验证一个字符擦混是否符合其规范。
 *  这里省略一张常用正则规范表格。
 *  在Pattern类中要想取得Pattern类实例，必须调用compiler()
 *
 *  实际工作中，经常需要执行某些定时操作，比如数据的定时备份，用户的定时短信提醒。
 *  Java在这块提供了Timer和TimerTask两个处理类
 *
 *  Timer类是一种线程设施，可以用来实现在某一个时间或某一段时间后安排某一个任务执行一次或定期重复执行。
 *  该功能要和TimerTask配合使用。
 *  TimerTask类用来实现由TImer安排一次或者重复执行的某一任务。
 *  每一个TImer独享对应的是一个线程，因此计时器所执行的任务应该迅速完成，否则可能会延迟后续任务的执行。
 *  而这些后续的任务就有可能堆在一起，等到该任务完成后才能快速连续执行。
 *
 *  Timer类中的常用方法：
 *  Timer()：//用来创建一个计时器并启动该计时器
 *  cancel()：用来终止该计时器，并放弃所有已安排的任务，对当前正在执行的任务没有影响
 *  purge()：将所有已经取消的任务删除，一般用来释放内存空间
 *  schedule(TimerTask task,Date time)：安排一个任务在指定的时间执行，如果已经超过该时间
 *  schedule(TimerTask task,Date firstTime,long period)：安排一个任务在指定的时间执行，然后以固定的频率执行（单位：ms）重复执行
 *  schedule(TimerTask task,long delay)：安排一个任务在一段时间（单位ms）后执行
 *  schedule(TimerTask task,long delay,long period)：安排一个任务在一段时间（单位ms）后执行，然后以固定的频率（单位ms）重复执行
 *  scheduleAtFixedRate(TimerTask task,Date firstTime,long period)：安排一个任务在指定的时间执行，然后伊金斯固定的频率（单位ms）重复执行
 *  scheduleAtFixedRate(TimerTask task,long delay,long period)：安排一个任务在一段时间（单位ms）后执行，然后以近似固定的频率（单位ms）重复执行
 *
 *  需要说明的是：schedule()和scheduleAtFixedRate()方法的区别在于重复执行任务时对于时间间隔出现延迟的情况处理
 *  ①schedule方法的执行时间间隔永远是固定的，如果之前出现了延迟情况，之后也会继续按照设定好的间隔时间来执行。
 *  ②scheduleAtFixedRate（）方法可以根据出现的延迟时间自动调整下一次间隔的执行时间
 *
 *  TimerTask类
 *  这个类是一个抽象类，想使用必须要建立一个类来继承此类，并实现其中的抽象方法。
 *  常用方法：
 *  cancel()：用来终止此任务，如果改任务只执行一次而且还没有执行，则永远不会在执行；如果为重复执行任务，则之后不会再执行（如果任务正在执行，则执行完之后不会再执行）
 *  run()：该任务索要执行的具体操作，该方法为引入的接口Runnable中的方法，子类需要覆写此方法
 *  scheduledExecutionTIme()：返回最近一次要执行该任务的时间（如果正在执行，则返回此任务的执行安排时间），一般在run()方法中调用，用来判断当前是否有足够的时间来执行完成该任务
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */